/**
 * 1.json对象数组格式
 */
let obj = {
    '0': 'Maple',
    '1': 29,
    length: 2
}
console.log('json数组格式: ', Array.from(obj))

/**
 * 2.数组转换
 * 字符串与数组间转换
 */
console.log('============>2.数组转换<============')
// 传统
let str = '[3,4,5]';
console.log('传统: ', eval(str))
// es6
let strArr = Array.of('Maple', 29);
console.log('es6: ', strArr)
// 数组转字符串
console.log('传统: ', strArr.toString())
// 自定义分隔符
console.log('es6: ', strArr.join('|'))

/**
 * 3.数组find方法
 */
console.log('============>3.数组find方法<============')
let arr = ['Maple', 'Jame', 1, 13, 113]
let s = arr.find((val, index, arr) => {
    return val == 'Jame';
})
console.log('元素查找: ', s)
console.log('是否包含元素: ', arr.includes('Jame'));

/**
 * 4.数组填充
 */
let fillArr = ['Maple', 'Jame', 'Tom']
fillArr.fill('web', 1, 3)
console.log('填充：', fillArr)

/**
 * 5.数组遍历
 * 5.1 foreach方法遍历
 * 5.2 filter过滤（包含遍历）
 * 5.3 of方法遍历
 * 5.4 in方法遍历
 * 5.5 map方法遍历
 */
console.log('============>5.数组遍历<============')
let loopArr = ['Maple', 'Jame', 'Tom']
// 5.1 foreach方法遍历
loopArr.forEach((val, idx) => {
    console.log('foreach-索引: ', idx, ';值: ', val)
});
// 5.2 filter过滤（包含遍历）
let filterArr = loopArr.filter((val, idx) => {
    console.log('filter-索引: ', idx, ';值: ', val);
    if (val == 'Maple') {
        return val;
    }
})
console.log('filterArr-过滤: ', filterArr)
console.log('============>5.2 of方法遍历<============')
// value遍历
for (let val of loopArr) {
    console.log('value遍历: ', val)
}
// 索引遍历
for (let item of loopArr.keys()) {
    console.log('索引遍历: ', item)
}
// 索引+value遍历
for (let [idx1, val1] of loopArr.entries()) {
    console.log('索引: ', idx1, ';值: ', val1)
}
// entries特殊使用
console.log('============>entries特殊使用<============')
let list = loopArr.entries()
let [idx2, val2] = list.next().value;
console.log('索引: ', idx2, ';值: ', val2)
let [idx3, val3] = list.next().value;
console.log('索引: ', idx3, ';值: ', val3)

// 针对数组索引遍历
console.log('============>5.4 in方法遍历<============')
for (let val in loopArr) {
   console.log('in-值: ', val)
}

/**
 * 5.5 map方法遍历
 * 遍历数组并将结果回填数组中
 */
console.log('============>5.4 map方法遍历<============')
let arrMap = [1,2,3,4,5,6,7,8,9,10];
// 传统遍历并回填
arrMap.forEach((val, idx) => {
    arrMap[idx] = val * 2;
});
console.log('传统: ', arrMap);
/**
 * 数组-Map
 * 循环每一个元素，将处理结果回填数组替换
 */
 let arrMap1 = arrMap.map((val, idx) => {
    return val *= 2;
});
console.log('es6: ', arrMap1);
/**
 * 数组-reduce
 * 循环取数组两个元素，将计算结果回填数组替换，获得最后处理结果
 */
let sum = arrMap.reduce((a, b) => a + b);
console.log("reduce求和：", sum)